package com.sun.alen.stagetwo;

import java.util.Scanner;

/**
 * 银行账户类，用于模拟简单的银行账户操作
 * 提供存款、取款、查询余额等基本功能，并包含输入验证以防止非法操作
 */
public class BankAccount {
    private double balance;

    /**
     * 无参构造函数，将账户余额初始化为0.0
     */
    public BankAccount() {
        this.balance = 0.0;
    }

    /**
     * 带参数的构造函数，用于初始化账户余额
     * @param initialBalance 初始余额，必须大于等于0
     * @throws IllegalArgumentException 当初始余额为负数时抛出异常
     */
    public BankAccount(double initialBalance) {
        if (initialBalance >= 0) {
            this.balance = initialBalance;
        } else {
            throw new IllegalArgumentException("初始余额不能为负数");
        }
    }

    /**
     * 获取账户当前余额
     * @return 当前账户余额
     */
    public double getBalance() {
        return balance;
    }

    /**
     * 设置账户余额（不推荐直接使用，建议通过deposit和withdraw方法操作）
     * @param balance 要设置的余额值
     */
    public void setBalance(double balance) {
        this.balance = balance;
    }

    /**
     * 向账户存款
     * @param amount 存款金额，必须大于0
     * @return 存款操作是否成功
     */
    public boolean deposit(double amount) {
        if (amount <= 0) {
            System.out.println("存款金额必须大于0！");
            return false;
        }
        this.balance += amount;
        System.out.println("存款"+amount+"成功，当前余额为：" + balance);
        return true;
    }

    /**
     * 从账户取款
     * @param amount 取款金额，必须大于0且不超过当前余额
     * @return 取款操作是否成功
     */
    public boolean withdraw(double amount) {
        if (amount <= 0) {
            System.out.println("取款金额必须大于0！");
            return false;
        }
        if (amount <= this.balance) {
            this.balance -= amount;
            System.out.println("取款"+amount+"成功，当前余额为：" + balance);
            return true;
        } else {
            System.out.println("余额不足！");
            return false;
        }
    }

    /**
     * 程序主入口，提供命令行交互界面用于操作银行账户
     * 用户可以选择存款、取款、查询余额或退出程序
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        BankAccount account = new BankAccount(1000); // 使用构造函数初始化余额
        Scanner scanner = new Scanner(System.in);
        
        // 主循环，持续接收用户操作指令
        while ( true)
        {
            System.out.println("请输入操作：1.存款 2.取款 3.查询余额 4.退出");
            int choice = scanner.nextInt();
            switch ( choice){
                case 1:
                    System.out.println("请输入存款金额：");
                    double depositAmount = scanner.nextDouble();
                    account.deposit(depositAmount);
                    break;

                case 2:
                    System.out.println("请输入取款金额：");
                    double withdrawAmount = scanner.nextDouble();
                    account.withdraw(withdrawAmount);
                    break;

                case 3:
                    System.out.println("当前余额为：" + account.getBalance());
                    break;

                case 4:
                    System.out.println("退出程序");
                    scanner.close();
                    return;
            }
        }
    }
}